package com.easylinkin.linkappapi.lobar.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.easylinkin.linkappapi.common.model.RequestModel;
import com.easylinkin.linkappapi.lobar.dto.*;
import com.easylinkin.linkappapi.lobar.entity.Warning;
import com.easylinkin.linkappapi.lobar.vo.*;
import java.util.List;
import site.morn.rest.RestMessage;

/**
 * <p>
 * 预警管理
 * </p>
 *
 * @author kanyuanfeng
 * @since 2022-05-24
 */
public interface WarningService {

  /**
   * @Description: 根据条件，分页(不分页)查询人员出勤预警
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  IPage<UserWarningDTO> queryUserWarning(RequestModel<UserWarningDTO> requestModel);

  /**
   * @Description: 根据条件，分页(不分页)查询疫情监测预警
   * @author xy
   * @date 2022/08/16 15:55
   */
  IPage<EpidemicWarningDTO> queryEpidemicWarning(RequestModel<EpidemicWarningDTO> requestModel);

  /**
   * @Description: 根据条件，分页(不分页)查询班组出勤预警
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  IPage<GroupWarningDTO> queryGroupWarning(RequestModel<GroupWarningDTO> requestModel);

  /**
   * @Description: 根据条件，分页(不分页)查询年龄预警
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  IPage<AgeWarningDTO> queryAgeWarning(RequestModel<AgeWarningDTO> requestModel);

  /**
   * @Description: 根据条件，分页(不分页)查询证书预警
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  IPage<CertificateWarningDTO> queryCertificateWarning(RequestModel<CertificateWarningDTO> requestModel);

  /**
   * @Description: 查询预警设置(没有设置的查询默认设置)
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  WarningConfigDTO queryWarningConfig(Boolean isDefault);

  /**
   * @Description: 设置预警参数
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  void updateWarningConfig(WarningConfigDTO warningConfig);

  /**
   * 根据条件，分页(不分页)查询所有预警
   * @param requestModel
   * @return
   */
  IPage<Warning> queryWarning(RequestModel<WarningDTO> requestModel);

  /**
   * 告警处理
   * @param warning
   */
  RestMessage handleWarning(Warning warning);

  /**
   * 预警记录统计
   * @param warningDTO
   * @return
   */
  CountWarningDTO countWarning(WarningDTO warningDTO);

  /**
   * 人员预警批量处理
   *
   * @param userWarningVo 人员预警vo
   * @return 统一出参
   */
  RestMessage userWarningBatchOperate(UserWarningVo userWarningVo);

  /**
   * 年龄预警批量处理
   *
   * @param ageWarningVo 年龄预警vo
   * @return 统一出参
   */
  RestMessage ageWarningBatchOperate(AgeWarningVo ageWarningVo);

  /**
   * 证书预警批量处理
   *
   * @param certificateWarningVo 证书预警vo
   * @return 统一出参
   */
  RestMessage certificateWarningBatchOperate(CertificateWarningVo certificateWarningVo);

  /**
   * 获取证书预警记录对应的证书信息
   *
   * @param id 证书告警id
   * @return 统一出参
   */
  RestMessage getWarningCertificateInfo(String id);

  /**
   * 证书预警记录更新证书
   *
   * @param certificateWarningVo 证书告警vo
   * @return 统一出参
   */
  RestMessage certificateWarningUploadCert(CertificateWarningVo certificateWarningVo);

  /**
   * 班组出勤预警批量处理
   *
   * @param groupWarningVo 班组出勤预警vo
   * @return 统一出参
   */
  RestMessage groupWarningBatchOperate(GroupWarningVo groupWarningVo);

  /**
   * 疫情监测预警信息批量处理
   *
   * @param epidemicWarningVo 疫情监测预警vo
   * @return 统一出参
   */
  RestMessage epidemicWarningBatchOperate(EpidemicWarningVo epidemicWarningVo);

  /**
   * 批量处理告警
   *
   * @param warningVo 预警入参vo
   * @return 统一出参
   */
  RestMessage warningBatchOperate(WarningVo warningVo);

  /**
   * @param requestModel 入参
   * @return 统一出参
   * @Description: 根据条件，分页(不分页)查询人员出场预警
   */
  IPage<UserOutinWarningDTO> queryUserOutinWarning(RequestModel<UserOutinWarningDTO> requestModel);

  /**
   * 人员进出场预警批量处理
   *
   * @param userOutinWarningVo 人员进出场预警vo
   * @return 统一出参
   */
  RestMessage userOutinWarningBatchOperate(UserOutinWarningVo userOutinWarningVo);

  /**
   * 根据id查询疫情告警数据
   */
  EpidemicWarningDTO queryEpidemicWarningById(String id);
}
